package top.jacktgq.hsp.netty.inbound_outbound_handler.v2;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;

/**
 * @Author CandyWall
 * @Date 2020/11/13--14:40
 * @Description
 */
public class NettyClientHandler extends SimpleChannelInboundHandler<Long> {
    //重写channelActive()方法 发送数据
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("MyClientHandler发送数据");
        ctx.writeAndFlush(123456L); //发送的是一个Long，会调用Long类型编码器
        //1、发送16个字节，长度可以表示两个long类型的数，decode和Handler会被调用几次？2次
        //2、该处理器的前一个Handler是MyLongToByteEncoder
        //3、MyLongToByteEncoder的父类是MessagetoByteEncoder
        //4、父类MessageToByteEncoder在write()方法内做了判断
        //      如果是支持处理的类型就去调用子类的encode()方法
        //      否则就跳过不进行编码了
        //5、因此，我们编写Encoder时要注意传入的数据类型和处理的数据类型要一致
        //ctx.writeAndFlush(Unpooled.copiedBuffer("abcdefghijklmnop", CharsetUtil.UTF_8));
    }

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, Long msg) throws Exception {
        System.out.println("从服务器端：" + ctx.channel().remoteAddress() + "，读取到long：" + msg);
    }
}
